package com.candy.dao;

import com.candy.bean.UserInfo;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;

@Repository
public class UserDao {
    //    表示对该方法进行缓存，默认缓存的key是方法的参数，缓存的value是方法的返回值
//    其他类调用该方法时，会根据参数查询是否有缓存数据，但在当前类中调用该方法，缓存不生效
    @Cacheable(value = "c1")
    public UserInfo getUserInfoById(Integer id){
        System.out.println("getUserInfoById");
        UserInfo userInfo=new UserInfo();
        userInfo.setId(id);
        userInfo.setUsername("tom");
        userInfo.setUseraddress("青岛");
        return userInfo;
    }
    //    用于数据更新方法，每次执行时不会检查缓存中是否有数据，而是直接执行方法，然后将方法执行结果缓存
//    自定义缓存的key
    @CachePut(value = "c1")
    public UserInfo updateUserInfoById(UserInfo userInfo){
        System.out.println("updateUserInfoById");
        userInfo.setUsername("张三");
        return userInfo;
    }
    //    用于删除方法，表示移除一个key对应的缓存，默认在方法执行之后移除缓存中的数据
    @CacheEvict(value = "c1")
    public void deleteUserInfoById(Integer id){
        System.out.println("deleteUserInfoById");
    }
}

